﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AccesoBD;
using System.Data.SqlClient;

namespace GAIA_Logica
{
    public class Especies
    {

        #region Atributos

        private int _id;

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
        private String _nomCien;

        public String NomCien
        {
            get { return _nomCien; }
            set { _nomCien = value; }
        }
        private String _nomPop;

        public String NomPop
        {
            get { return _nomPop; }
            set { _nomPop = value; }
        }
        private int _numFormula;

        public int NumFormula
        {
            get { return _numFormula; }
            set { _numFormula = value; }
        }

        //Conexion a base de datos
        private AcessoBD dba = new AcessoBD(Properties.Settings.Default.GAIA_CON);

        #endregion

        #region Metodos

        public bool ingresarEspecie()
        {

            bool result = false;

            try
            {


                //Query
                String sqlQuery = "Insert into Especies values(param1,param2,param3,param4)";

                //Lista parametros
                Parametros[] parametros = new Parametros[4];
                parametros[0] = new Parametros(this.Id, "param1");
                parametros[1] = new Parametros(this.NomCien, "param2");
                parametros[2] = new Parametros(this.NomPop, "param3");
                parametros[3] = new Parametros(this.NumFormula, "param4");

                result = dba.executeSQL(sqlQuery, parametros);

            }
            catch (Exception ex) {
                throw new Exception("Ocurrio un error a la hora de ingresar la especie: " + ex.Message);
            }

            return result;
        }

        public bool borrarEspecie()
        { 
            bool result = false;

            try
            {
                String sqlQuery = "Delete Especies where id=" + this.Id;
                result = dba.executeSQL(sqlQuery, null);
            }
            catch (Exception ex) {
                throw new Exception("Ocurrio un error a la hora de eliminar la especie:" + ex.Message);
            }

            return result;
        }

        public bool actulizarEspecie(int pid)
        {

            bool result;

            try
            {

                //Query
                String sqlQuery = "Update Especies set id=param1,nombre_cientifico=param2,nombre_popular=param3,num_formula=param4 where id=" + pid;

                //Lista parametros
                Parametros[] parametros = new Parametros[4];
                parametros[0] = new Parametros(this.Id, "param1");
                parametros[1] = new Parametros(this.NomCien, "param2");
                parametros[2] = new Parametros(this.NomPop, "param3");
                parametros[3] = new Parametros(this.NumFormula, "param4");

                result = dba.executeSQL(sqlQuery, parametros);
            }catch(Exception ex){
                throw new Exception("Ocurrio un error a la hora de actualizar al especie:" + ex.Message);
            }

            return result;
            
        }

        public List<Especies> getListaEspecies()
        {

            List<Especies> listaEspecies = new List<Especies>();
            string sqlQuery = "Select id, nombre_cientifico, nombre_popular, num_formula from Especies";

            try
            {
                SqlDataReader rs = dba.execute_Consulta(sqlQuery, null);

                while (rs.Read())
                {
                    Especies objSeg = new Especies();
                    objSeg.Id = rs.GetInt32(rs.GetOrdinal("id"));
                    objSeg.NomCien = rs.GetString(rs.GetOrdinal("nombre_cientifico"));
                    objSeg.NomPop = rs.GetString(rs.GetOrdinal("nombre_popular"));
                    objSeg.NumFormula = rs.GetInt32(rs.GetOrdinal("num_formula"));
                    listaEspecies.Add(objSeg);
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error a la hora de listar las especies: " + ex.Message);
            }

            return listaEspecies;
        }


        public List<Especies> buscarEspecies(int pcodigo,string pnombre)
        {

            List<Especies> listaEspecies = new List<Especies>();
            string sqlQuery = "Select id, nombre_cientifico, nombre_popular, num_formula from Especies where (1=1)";

            if (pcodigo > 0) {
                sqlQuery += " and id=" + pcodigo;
            }

            if (pnombre != null && pnombre.Length > 0) {
                sqlQuery += " and nombre_popular like ('%" + pnombre + "%')";
            }

            try
            {
                SqlDataReader rs = dba.execute_Consulta(sqlQuery, null);

                while (rs.Read())
                {
                    Especies objSeg = new Especies();
                    objSeg.Id = rs.GetInt32(rs.GetOrdinal("id"));
                    objSeg.NomCien = rs.GetString(rs.GetOrdinal("nombre_cientifico"));
                    objSeg.NomPop = rs.GetString(rs.GetOrdinal("nombre_popular"));
                    objSeg.NumFormula = rs.GetInt32(rs.GetOrdinal("num_formula"));
                    listaEspecies.Add(objSeg);
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error a la hora de listar las especies: " + ex.Message);
            }

            return listaEspecies;
        }

        public Especies buscarEspecieId(int pcodigo) {
            Especies objSeg = new Especies();
            string sqlQuery = "Select * from Especies where id = " + pcodigo;
            try
            {
                SqlDataReader rs = dba.execute_Consulta(sqlQuery, null);

                while (rs.Read())
                {
                    objSeg.Id = rs.GetInt32(rs.GetOrdinal("id"));
                    objSeg.NomCien = rs.GetString(rs.GetOrdinal("nombre_cientifico"));
                    objSeg.NomPop = rs.GetString(rs.GetOrdinal("nombre_popular"));
                    objSeg.NumFormula = rs.GetInt32(rs.GetOrdinal("num_formula"));
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error al buscar la especie: " + ex.Message);
            }
            return objSeg;
        }

        #endregion



    }
}
